package com.itheima.mapper;

import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface DeptMapper {
    // 查询所有部门数据
    // 表中字段名和类中成员变量名不一致解决方案一: 查询时取别名, 别名就是类中成员变量名 (麻烦不推荐)
    // @Select("select id, name, create_time createTime, update_time updateTime from dept;")

    // 表中字段名和类中成员变量名不一致解决方案二: 手动结果映射
    // @Results: 手动结果映射
    // @Result: 对一个字段进行映射, column: 表中字段名, property: 类中成员变量名
    // @Results({
    //         @Result(column = "create_time", property = "createTime"),
    //         @Result(column = "update_time", property = "updateTime")
    // })
    @Select("select * from dept;")
    public List<Dept> findAll();

    /**
     * 根据id删除部门
     * #{参数名}: 1.使用?占位, 2.把参数赋值给?, 不会有SQL注入    效果: delete from dept where id = ?;
     * ${参数名}: 直接拼接字符串到SQL语句中, 可能有SQL注入       效果: delete from dept where id = 1;
     * @param id
     * @return
     */
    @Delete("delete from dept where id = ${id};")
    int delete(Integer id);

    /**
     * ctrl + shift + u: 大小写切换
     * 添加部门,    SQL语句: INSERT INTO 表名 (字段名1, 字段名2) values (值1, 值2);
     * MyBatis方法参数是自定义类, #{成员变量名}  1.使用?占位, 2.使用成员变量值赋值给?
     * @param dept
     * @return
     */
    @Insert("insert into dept (name, create_time, update_time) values (#{name}, #{createTime}, #{updateTime});")
    int add(Dept dept);

    /**
     * 修改部门-根据id查询部门
     * @param id
     * @return
     */
    @Select("select * from dept where id = #{id};")
    Dept getById(Integer id);

    /**
     * 根据id修改部门     修改的SQL语句: update 表名 set 字段名 = 新的值, 字段名 = 新的值 where 条件
     * 参数是自定义的类, #{成员变量名}
     * @param dept
     * @return
     */
    // @Update("update dept set name = #{name}, update_time = #{updateTime} where id = #{id};")
    int update(Dept dept);
}


















